Skip to Content
Yodao 2.0 soon ... πŸš€

πŸ”οΈ Search API

Warning

Each endpoint at https://api2.yodao.ioΒ  is rate-limited to 120 req/min (TTL 60s).

πŸ”Ž Search Tokens

Endpoint: GET /api/v2/search/tokens/detailed

Search tokens by mint address, name, or symbol with full market data, 24h statistics, and holder information.

Query Parameters:

ParameterTypeRequiredDescriptionExample
querystringYesCase-insensitive search stringKORI

Response: Returns an array of matching tokens with complete market data.

GET /api/v2/search/tokens/detailed

View Response Structure

typescript
type TokenSearchDetailed = {
// Base token data
name: string
symbol: string
uri: string
mint: string
bonding_curve: string
creator: string
pool_amm: string
migration_signature: string | null
migration_timestamp: string | null
image: string
video: string
twitter: string
website: string
discord: string
telegram: string
created_on: string
description: string
token_program: string
is_mayhem_mode: boolean
timestamp: string
complete: boolean

// Market data
pct_completion: number
market_cap: number
liquidity: number
volume: number
token_price_sol: number
token_price_usd: number
sol_price_usd: number

// 24h trading data
tx_24h: number
tx_24h_buy: number
tx_24h_sell: number
vol_24h: number
vol_24_buy: number
vol_24_sell: number

// Holders and traders data
holders: number
top_10_percent: number
creator_holding_pct: number
bundle_holding: number
insiders_holding: number
snipers_holding: number
fresh_wallet_holding: number
pro_traders: number

// Additional fields
age_seconds: number
}

View Code

javascript
async function searchTokens(query) {
const url = new URL('https://api2.yodao.io/api/v2/search/tokens/detailed')
url.searchParams.set('query', query)

const response = await fetch(url)
if (!response.ok) throw new Error(`Request failed: ${response.status}`)

return response.json()
}

searchTokens('KORI')
.then(console.log)
.catch(console.error)

πŸ“Š Token Market Data

Endpoint: GET /api/v2/search/tokens/:mint/market-data

Returns market metrics for one or more tokens.

Parameters:

NameLocationRequiredDescription
mintpathYes*Token mint address. To query multiple tokens, you can use a placeholder (e.g., placeholder) and use the mints parameter instead.
mintsqueryNoComma-separated list of mint addresses. At least one of mint or mints must be provided.

Response: Array of market data objects.

GET /api/v2/search/tokens/:mint/market-data

View Response Structure

typescript
type TokenMarketData = {
pool: string
name: string
symbol: string
creator: string
timestamp: string
mint: string
image: string | null
video: string | null
twitter: string | null
website: string | null
discord: string | null
telegram: string | null
description: string | null
pct_completion: number
market_cap: number
liquidity: number
token_price_sol: number
token_price_usd: number
tx_24h: number
tx_24h_buy: number
tx_24h_sell: number
vol_24h: number
vol_24_buy: number
vol_24_sell: number
holders: number
top_10_percent: number
creator_holding_pct: number
bundle_holding: number
insiders_holding: number
snipers_holding: number
pro_traders: number
fresh_wallet_holding: number
}

View Code

javascript
async function getMarketData(mint) {
const url = new URL(`https://api2.yodao.io/api/v2/search/tokens/${mint}/market-data`)

const response = await fetch(url)
if (!response.ok) throw new Error(`Request failed: ${response.status}`)

return response.json()
}

// Single token
getMarketData('Frc6riWNhsJNhLQwCPd3p9h1RBpxNysScKk6hDpHpump')
.then(console.log)
.catch(console.error)

// Multiple tokens
async function getMultipleMarketData(mints) {
const url = new URL('https://api2.yodao.io/api/v2/search/tokens/placeholder/market-data')
url.searchParams.set('mints', mints.join(','))

const response = await fetch(url)
if (!response.ok) throw new Error(`Request failed: ${response.status}`)

return response.json()
}

getMultipleMarketData([
'Frc6riWNhsJNhLQwCPd3p9h1RBpxNysScKk6hDpHpump',
'8ZQme2xv6prRKkKNA4PTn5DSXUTdY6yeoc5yDkm7pump'
])
.then(console.log)
.catch(console.error)

πŸ”„ Token Swap History

Endpoint: GET /api/v2/search/tokens/:mint/swaps

Returns token swap history with pagination.

Query Parameters:

ParameterRequiredDefaultDescription
walletNoβ€”Signer address. If omitted, all swaps for the specified token will be returned.
pageNo1Page number, >= 1.
limitNo50Page size. Valid range 1-200.

Response: Returns a pagination object with an array of swap transactions.

GET /api/v2/search/tokens/:mint/swaps

View Response Structure

typescript
type PaginatedSwapResponse = {
total: number
page: number
limit: number
items: Array<{
  slot: number
  tx_index: number
  signature: string
  timestamp: string
  source: string
  direction: string
  signer: string
  mint: string
  pool: string
  base_mint_amount: number
  quote_mint_amount: number
  base_mint_price_usd: number
  sol_price_usd: number
  volume_usd: number
  m_cap_usd: number
  bonding_curve_progress: number
  liquidity_usd: number
  chain_fee: number
  pump_fee: number
  creator_fee: number
  base_balance_before: number
  base_balance_after: number
  fresh_wallet: boolean
  sniper_wallet: boolean
  pro_trader: boolean
}>
}

View Code

javascript
async function fetchTokenSwaps(mint, options = {}) {
const { page = 1, limit = 50, wallet } = options

const url = new URL(`https://api2.yodao.io/api/v2/search/tokens/${mint}/swaps`)
url.searchParams.set('page', page)
url.searchParams.set('limit', limit)
if (wallet) url.searchParams.set('wallet', wallet)

const response = await fetch(url)
if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${response.statusText}`)
}

return response.json()
}

// Usage
try {
const data = await fetchTokenSwaps(
  'Frc6riWNhsJNhLQwCPd3p9h1RBpxNysScKk6hDpHpump',
  { page: 1, limit: 25 }
)

console.log(`Total swaps: ${data.total}`)
console.log(`Current page: ${data.page}/${Math.ceil(data.total / data.limit)}`)

data.items.forEach(swap => {
  console.log(`${swap.direction.toUpperCase()}: ${swap.base_mint_amount} tokens at ${swap.base_mint_price_usd}`)
})
} catch (error) {
console.error('Failed to fetch swaps:', error.message)
}

πŸ“‰ Token OHLCV Chart

Endpoint: GET /api/v2/meme/chart/ohlcv

Returns OHLCV data for TradingView-compatible charts in USD and SOL. Result is cached for 5 seconds.

Query Parameters:

ParameterTypeRequiredDescription
mintstringYesToken mint address.
fromstring (unix)YesStart of time range in POSIX seconds.
tostring (unix)YesEnd of time range in POSIX seconds.
resolutionstringYesTradingView timeframe: 1S, 5S, 15S, 30S, 1, 5, 15, 30, 60, 240, 1D, 1W, 1M.

Response: Parallel arrays of values.

GET /api/v2/meme/chart/ohlcv

View Response

json
{
"t": [1704067200, 1704067500, 1704067800, 1704068100, 1704068400],
"o": [0.0000123, 0.0000125, 0.0000124, 0.0000126, 0.0000125],
"h": [0.0000128, 0.0000129, 0.0000127, 0.0000130, 0.0000128],
"l": [0.0000121, 0.0000123, 0.0000122, 0.0000124, 0.0000123],
"c": [0.0000125, 0.0000124, 0.0000126, 0.0000125, 0.0000127],
"v": [15000, 12500, 18000, 14200, 16800],
"o_sol": [0.000245, 0.000248, 0.000247, 0.000250, 0.000248],
"h_sol": [0.000252, 0.000253, 0.000251, 0.000254, 0.000252],
"l_sol": [0.000241, 0.000245, 0.000244, 0.000246, 0.000245],
"c_sol": [0.000248, 0.000247, 0.000249, 0.000248, 0.000250],
"v_sol": [300, 250, 360, 284, 336]
}

View Code

javascript
async function fetchOHLCV(mint, from, to, resolution = '5') {
const url = new URL('https://api2.yodao.io/api/v2/meme/chart/ohlcv')
url.searchParams.set('mint', mint)
url.searchParams.set('from', from)
url.searchParams.set('to', to)
url.searchParams.set('resolution', resolution)

const response = await fetch(url)
if (!response.ok) throw new Error(`HTTP ${response.status}`)

return response.json()
}

// Get last 24 hours of 5-minute candles
const now = Math.floor(Date.now() / 1000)
const yesterday = now - 86400

const ohlcv = await fetchOHLCV(
'GqLhiiuAioeeAhqoUfDCB3aCWAfA4T73DKfTVUVbpump',
yesterday,
now,
'5'
)

// Convert to chart format
const candles = ohlcv.t.map((timestamp, i) => ({
time: timestamp,
open: ohlcv.o[i],
high: ohlcv.h[i],
low: ohlcv.l[i],
close: ohlcv.c[i],
volume: ohlcv.v[i]
}))

console.log(`Loaded ${candles.length} candles`)
Last updated on